/*
 * Created on 17/12/2006
 *
 */
package tur.br.moradadosol.view.action;

import java.util.Calendar;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import tur.br.moradadosol.control.ApartamentoControl;
import tur.br.moradadosol.control.HospedagemControl;
import tur.br.moradadosol.control.HospedeControl;
import tur.br.moradadosol.control.UserAutentication;
import tur.br.moradadosol.model.Hospedagem;
import tur.br.moradadosol.model.Hospede;
import tur.br.moradadosol.view.form.HospedagemForm;

/**
 * @author Ramon F. Garcia
 *
 */
public class EntradaAction extends Action {
	
	
	/**
	 * @param arg0
	 * @param arg1
	 * @param arg2
	 * @param arg3
	 * @return
	 * @throws java.lang.Exception
	 */
	public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response)
		throws Exception {
		
		HttpSession session = request.getSession();
		
		if(!UserAutentication.isUserAutenticated(session)) {
			return mapping.findForward("login");
		}
		
		ActionMessages errors = new ActionMessages();

		HospedagemForm Form = (HospedagemForm) form;
		
		HospedagemControl hospedagemControl = new HospedagemControl();
		
		HospedeControl hospedeControl = new HospedeControl();
		
		ApartamentoControl apartamentoControl = 
			(ApartamentoControl) session.getAttribute("apartamentoControl");
		if(apartamentoControl == null) {
			apartamentoControl = new ApartamentoControl();
			session.setAttribute("apartamentoControl", apartamentoControl);
		}
		
		int codigoHospede = 0;
		if(request.getParameter("codigoHospede") != null 
			&& !request.getParameter("codigoHospede").equals("")) {

			codigoHospede = Integer.parseInt(
				request.getParameter("codigoHospede"));
		}
		int codigoHospedagem = 0;
		if(request.getParameter("codigoHospedagem") != null
			&& !request.getParameter("codigoHospedagem").equals("")) {

			codigoHospedagem = Integer.parseInt(
				request.getParameter("codigoHospedagem"));
		}
		
		try {
			if(Form.getGravar().length() > 0) {
				Hospedagem hospedagem = Form.getHospedagem();
				
				hospedagem.setStatus(Hospedagem.STATUS_ENTRADA);
				
				hospedagemControl.gravar(hospedagem);
				
				errors.add("reserva.error", new ActionMessage(
						"message.operation.sucess"));
			}
			else if(Form.getLimpar().length() > 0) {
				Form.reset();
				Form.reset(mapping, request);
			}
			else if(Form.getDeletar().length() > 0) {
				hospedagemControl.cancelar(Form.getHospedagem().getCodigo());
				Form.reset();
				Form.reset(mapping, request);
			}
			else if(Form.getProcurar().length() > 0) {
				session.setAttribute("pagina", "entrada");
		
				return mapping.findForward("procurahospede");
			}
			else if(Form.getProcurarReserva().length() > 0) {
				session.setAttribute("pagina", "entrada");
		
				return mapping.findForward("procurareserva");
			}
			else if(Form.getCalcularPreco().length() > 0) {
				float valorTotal = hospedagemControl.getValorTotalByPeriodo(
						Form.getHospedagem());
				
				Form.getHospedagem().setPreco(valorTotal);
			}
			else if(codigoHospede != 0) {
				Hospede hospede = hospedeControl.getHospedeByCodigo(
					codigoHospede);
				
				Form.setHospede(hospede);
			}
			else if(codigoHospedagem != 0) {
				Hospedagem hospedagem = hospedagemControl.getHospedagemByCodigo(
					codigoHospedagem);
		
				Form.setHospedagem(hospedagem);
			}
		}
		catch(Exception e) {
			errors.add("reserva.error", new ActionMessage(e.getMessage()));
		}

		if (!errors.isEmpty()) {
			saveErrors(request, errors);
		}
		
		apartamentoControl.loadApartamentos();
		
		if(Form.getHospedagem().getCodigo() == 0 &&
				Form.getHospedagem().getEntrada() == null) {
			Form.getHospedagem().setEntrada(Calendar.getInstance());
		}
		
		return mapping.getInputForward();
	}

}
